package Controlador;

import java.awt.GridLayout;

import javax.swing.BoxLayout;
import javax.swing.JPanel;

/*
 * esta clase permite poder generar diversos paneles que se agregaran a la ventana principal...
 */
public class Paneles extends JPanel{

	private static final long serialVersionUID = 1L;
	
	//atributos de la clase...
	private Botones botoncitos;//atributo que contiene los diversos botones que se incluiran en la ventana principal
	private Etiquetas etiquetas;//atributo que contiene las diversas etiquetas a usar a lo largo de la aplicacion...
	private BarraProgreso barrita;//atributo que contiene la barra de progreso a utilizar...
	private AreasTextos Areas;//atributo que contiene las areas de texto a utilizar...
	
	public AreasTextos getAreas() {
		return Areas;
	}

	//constructor de la clase..
	public Paneles (){
		
		this.botoncitos = new Botones();//instancia de Botones...
		this.etiquetas = new Etiquetas();//instancia de Etiquetas...
		this.barrita = new BarraProgreso();//instancia de BarraProgreso...
		this.Areas = new AreasTextos();//instancia de AreasTextos...
		
		this.botoncitos.AgregarBotones();//agregamos los botones a la coleccion...
		this.etiquetas.RellenaEjecucion();//agregamos las etiquetas a las colecciones...
		this.etiquetas.RellenaEstados();//agregamos las etiquetas a las colecciones...
		this.etiquetas.RellenaMemoria();//agregamos las etiquetas a las colecciones...
		
	}
	
	//metodo que nos permite poder agregar los botones al panel y dicho panel retornarlo para poder agregarlo a la ventana principal..
	public JPanel GeneraSectorEste(){
		
		this.setLayout(new GridLayout (0,1, 5,5));//setiamos el layout del panel...
		
		this.add(this.etiquetas.getTituloBoton());
		for (int i=0; i<this.botoncitos.getColeccionBotones().size(); i++)
			
			this.add(this.botoncitos.getColeccionBotones().get(i));//agregamos los botones al panel...
		this.add(new JPanel());//agregamos un panel imaginario...		
		
		JPanel panelAxu = new JPanel();//generamos un panel auxiliar para poder generar una mejor disposicion de los widgets...
		panelAxu.setLayout(new BoxLayout(panelAxu, BoxLayout.X_AXIS));//le modificamos su layout...
		//le comenzamos a agregar los widgets...
		panelAxu.add(this);
		//dentro de los widgets que agregamos le colocamos los paneles imaginarios...
		panelAxu.add(new JPanel());
		panelAxu.add(new JPanel());

		return panelAxu;//retornamos el panel auxiliar...
	}
	
	//metodo que nos permite poder agregar los widgets al sector sur de la ventana...
	public JPanel GeneraSectorSur(){
		
		JPanel panelaux = new JPanel();
		JPanel panelaux2 = new JPanel();
		
		panelaux.setLayout(new BoxLayout (panelaux, BoxLayout.X_AXIS));//generamos una caja de widgets...
		panelaux2.setLayout(new BoxLayout (panelaux2, BoxLayout.X_AXIS));//generamos una caja de widgets...
		
		panelaux.add(new JPanel());//paneles imaginarios...
		panelaux.add(this.etiquetas.getTiempo());//agregamos la etiqueta...
		panelaux.add(new JPanel());//paneles imaginarios...
		
		panelaux2.add(new JPanel());//paneles imaginarios...
		panelaux2.add(this.barrita.getBarra());//agregamos la etiqueta...
		panelaux2.add(new JPanel());//paneles imaginarios...
		
		this.setLayout(new GridLayout (0,1, 5,5));//modificamos el layout...
		this.add(panelaux);
		
		
		this.add(panelaux2);
		
		this.add(new JPanel());//panel imaginario...
		return this;
	}
	
	//metodo que nos permite poder generar el sector centro de la ventana...
	public JPanel GenerarSectorCentro(){
		
		JPanel panelaux1 = new JPanel();
		JPanel panelaux2 = new JPanel();
		
		panelaux1.setLayout(new GridLayout (0,1,5,5));
		panelaux2.setLayout(new GridLayout (0,1,5,5));
		
		for (int i=0; i<this.etiquetas.getEstados().size(); i++)
			panelaux1.add(this.etiquetas.getEstados().get(i));
		panelaux1.add(new JPanel());
		panelaux1.add(new JPanel());

		for (int i=0; i<this.etiquetas.getEjecucion().size(); i++)
			panelaux2.add(this.etiquetas.getEjecucion().get(i));
		panelaux2.add(new JPanel());

		this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
		
		this.add(new JPanel());
		this.add(panelaux1);
		this.add(new JPanel());
		this.add(panelaux2);

		return this;
	}

	//metodo que nos permite poder generar el sector oeste de la ventana...
	public JPanel GenerarSectorOeste(){
		
		//modificamos el layout del panel...
		this.setLayout(new BoxLayout (this, BoxLayout.Y_AXIS));
		
		//le agregamos el titulo de la seccion...
		this.add(this.etiquetas.getMemoria().get(0));
		this.add(new JPanel());//panel imaginario para generar espacio...
		
		//generaremos diversos paneles con sus diversos contenedores con el fin de poder dejar las areas de texto del mismo porte...
		JPanel panelAux1 = new JPanel();//panel auxiliar 1...
		
		panelAux1.setLayout(new BoxLayout (panelAux1, BoxLayout.Y_AXIS));//modificamos su layout...
		
		JPanel panelAux22 = new JPanel();//contendra un panel imaginario y un area de texto...
		JPanel panelAux11 = new JPanel();//contendra un panel imaginario y un area de texto...

		panelAux1.add(this.etiquetas.getMemoria().get(1));//le agregamos el titulo...
		panelAux1.add(this.Areas.getPane1());//le agregamos el area de texto...
		
		panelAux11.setLayout(new BoxLayout (panelAux11, BoxLayout.X_AXIS));
		panelAux11.add(new JPanel());//agregamos panel iamginario...
		panelAux11.add(panelAux1);//le agregamos el panel con la seccion de los registros...
		
		this.add(panelAux11);//le agregamos al panel principal el primer panel contenedor de los registros 
		
		this.add(new JPanel());//ahora le agregamos un panel imaginario...
		
		JPanel panelAux2 = new JPanel();//panel auxiliar 2...
		
		panelAux2.setLayout(new BoxLayout (panelAux2, BoxLayout.Y_AXIS));//le setiamos su layout...
		panelAux2.add(this.etiquetas.getMemoria().get(2));//le agregamos el titulo...
		panelAux2.add(this.Areas.getPane2());//le agregamos el area de texto...
	
		panelAux22.setLayout(new BoxLayout (panelAux22, BoxLayout.X_AXIS));
		
		panelAux22.add(new JPanel());//agregamos panel iamginario...
		panelAux22.add(panelAux2);//le agregamos el panel con la seccion de instrucciones...
		
		this.add(panelAux22);//le agregamos al panel principal el panel contenedor de la seccion de instrucciones...
		
		return this;//finalmente retornamos el panel a ocupar...
	}
	//generamos los getters necesarios para poder acceder a los estados de la clase...
	public Botones getBotoncitos() {
		return botoncitos;
	}

	public Etiquetas getEtiquetas() {
		return etiquetas;
	}

	public BarraProgreso getBarrita() {
		return barrita;
	}
}